package pe.gob.mininter.dirandro.vaadin.panel.util;

import java.util.List;

import pe.gob.mininter.dirandro.model.Distrito;
import pe.gob.mininter.dirandro.model.RutaTid;
import pe.gob.mininter.dirandro.service.RutaTIDService;
import pe.gob.mininter.dirandro.service.UbigeoService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.AbstractSelect.Filtering;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.VerticalLayout;


public class PanelAgregarRutaTID extends CustomComponent implements ClickListener {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout pnlBody;
	@AutoGenerated
	private Button btnRegistrarVehiculo;
	@AutoGenerated
	private TextArea textArea_1;
	@AutoGenerated
	private ComboBox cmbDestino;
	@AutoGenerated
	private ComboBox cmbOrigen;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoRuta;
	
	private static final long serialVersionUID = -1544986287716283352L;
	
	private UbigeoService ubigeoService;
	private RutaTIDService rutaTIDService;
	private RutaTid rutaTid;

	
	public RutaTid getRutaTid() {
		return rutaTid;
	}

	public void setRutaTid(RutaTid rutaTid) {
		this.rutaTid = rutaTid;
	}

	public PanelAgregarRutaTID() {
		buildMainLayout();
		ubigeoService = Injector.obtenerServicio(UbigeoService.class);
		rutaTIDService = Injector.obtenerServicio(RutaTIDService.class);
		setCompositionRoot(mainLayout);
		postConstruct();
	}

	public void postConstruct() {
		btnRegistrarVehiculo.addListener((ClickListener) this);
		cmbTipoRuta.setInputPrompt("Tipo de Vehículo");
		cmbTipoRuta.setCodigoLista(Constante.LISTA.CODIGO.TIPO_RUTA_TID);
		
		List<Distrito> distritos = ubigeoService.obtenerTodos();
		cmbUbigeo(distritos, cmbOrigen);
		cmbUbigeo(distritos, cmbDestino);
	}
	
	private void cmbUbigeo(List<Distrito> distrito, ComboBox cmbUbigeo){
		cmbUbigeo.setInputPrompt("Distrito - Provincia - Departamento");
		cmbUbigeo.setItemCaptionPropertyId("nombreCompleto");
		cmbUbigeo.setContainerDataSource(new BeanItemContainer<Distrito>(Distrito.class,  distrito));
		cmbUbigeo.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnRegistrarVehiculo)){
			RutaTid rutaTid = new RutaTid();
			rutaTid.setOrigen((Distrito) cmbOrigen.getValue());
			rutaTid.setDestino((Distrito) cmbDestino.getValue());
			rutaTid.setTipo(cmbTipoRuta.getValor());
			rutaTid.setDescripcion("test");
			rutaTIDService.crear(rutaTid);
			
			AlertDialog alertDialog = new  AlertDialog("Registro de Ruta TID", "Se ha registrado la ruta correctamente", "Aceptar", "400");
			getApplication().getMainWindow().addWindow(alertDialog);
			
			btnRegistrarVehiculo.setEnabled(false);
			setRutaTid(rutaTid);
			detach();
			getApplication().getMainWindow().removeWindow(getWindow());
			
		}
	}

	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("500px");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("500px");
		setHeight("-1px");
		
		// pnlBody
		pnlBody = buildPnlBody();
		mainLayout.addComponent(pnlBody);
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildPnlBody() {
		// common part: create layout
		pnlBody = new VerticalLayout();
		pnlBody.setStyleName("h2");
		pnlBody.setCaption("Registro de Ruta TID");
		pnlBody.setImmediate(false);
		pnlBody.setWidth("-1px");
		pnlBody.setHeight("-1px");
		pnlBody.setMargin(true);
		pnlBody.setSpacing(true);
		
		// cmbTipoRuta
		cmbTipoRuta = new ComboBoxLOVS();
		cmbTipoRuta.setCaption("Tipo de Tamaño");
		cmbTipoRuta.setImmediate(false);
		cmbTipoRuta.setWidth("200px");
		cmbTipoRuta.setHeight("-1px");
		pnlBody.addComponent(cmbTipoRuta);
		
		// cmbOrigen
		cmbOrigen = new ComboBox();
		cmbOrigen.setCaption("Origen");
		cmbOrigen.setImmediate(false);
		cmbOrigen.setWidth("400px");
		cmbOrigen.setHeight("-1px");
		pnlBody.addComponent(cmbOrigen);
		
		// cmbDestino
		cmbDestino = new ComboBox();
		cmbDestino.setCaption("Destino");
		cmbDestino.setImmediate(false);
		cmbDestino.setWidth("400px");
		cmbDestino.setHeight("-1px");
		pnlBody.addComponent(cmbDestino);
		
		// textArea_1
		textArea_1 = new TextArea();
		textArea_1.setImmediate(false);
		textArea_1.setWidth("400px");
		textArea_1.setHeight("-1px");
		pnlBody.addComponent(textArea_1);
		
		// btnRegistrarVehiculo
		btnRegistrarVehiculo = new Button();
		btnRegistrarVehiculo.setCaption("Grabar");
		btnRegistrarVehiculo.setImmediate(true);
		btnRegistrarVehiculo.setWidth("-1px");
		btnRegistrarVehiculo.setHeight("-1px");
		pnlBody.addComponent(btnRegistrarVehiculo);
		
		return pnlBody;
	}
}
